20 GOTO 2000: REM --------------<CTRL-M><CTRL-M> DEMO PROGRAM FOR STORING<CTRL-M><CTRL-M> AND RETRIEVING<CTRL-M><CTRL-M> NUMBERS (100&200)<CTRL-M><CTRL-M> AND STRINGS (300&400)<CTRL-M><CTRL-M> WHEN VARIABLES CLEARED<CTRL-M><CTRL-M> AS IN 'RUN' OR 'CLEAR'.<CTRL-J>
30 REM --------------------<CTRL-M><CTRL-M> IF REM ( ) IS FIRST<CTRL-M><CTRL-M> LINE OF PROGRAM<CTRL-M><CTRL-M> FIRST SPACE INSIDE ()<CTRL-M><CTRL-M> IS MEMORY LOCATION 2055<CTRL-M><CTRL-M> PUT PLENTY OF SPACES IN<CTRL-M><CTRL-M> FIRST LINE & READ MORE<CTRL-M><CTRL-M> THAN MAX STRING LENGTH<CTRL-J>
40 REM *************************<CTRL-M><CTRL-M> FOR DEMO TYPE AS FOLLOWS:<CTRL-M><CTRL-M> RUN 100<CTRL-M><CTRL-M> RUN 200<CTRL-M><CTRL-M> RUN 300<CTRL-M><CTRL-M> RUN 400<CTRL-M><CTRL-M>*********************************<CTRL-J>
100 REM NUMBERS:<CTRL-M><CTRL-M> IF NUMBER IS ONE DIGIT<CTRL-M><CTRL-M> POKE NUMBER + 112<CTRL-M><CTRL-M> TO HAVE IT SHOW CORRECTLY<CTRL-M><CTRL-M> ==>MAX NUMBER IN ONE<CTRL-M><CTRL-M> MEMORY SLOT IS 255!<CTRL-M><CTRL-M> ==>FOR GREATER THAN 255<CTRL-M><CTRL-M> USE STRINGS AND VAL(A$)<CTRL-J>
110 REM EXAMPLE: TO SAVE 5
120 CLEAR : FOR I = 1 TO 25: POKE 2054 +I,32: NEXT : REM <CTRL-M><CTRL-M> REMOVE PREVIOUS VALUES<CTRL-J>
130 X = 5
140 POKE 2055,X +112
150 REM NOW LIST LINE 10
160 HOME : LIST 10
170 GOSUB 3010
180 VTAB 23: HTAB 14: FLASH : PRINT "TYPE:";: NORMAL : PRINT " RUN 200";
190 END
200 REM <CTRL-M><CTRL-M> PEEK TO GET IT BACK<CTRL-J>
210 VTAB 11: HTAB 8: PRINT " TO GET IT BACK JUST PEEK": PRINT : HTAB 11: PRINT "WHEREVER YOU PUT IT": PRINT : PRINT
220 HTAB 6: PRINT "(SUBTRACT 112 FOR A SINGLE DIGIT!)": PRINT : PRINT
240 VTAB 21: HTAB 1: CALL -958: VTAB 23: HTAB 14: FLASH : PRINT "TYPE:";: NORMAL : PRINT " RUN 300";: NORMAL
250 END
300 REM -----------------------<CTRL-M><CTRL-M> FOR STRINGS USE<CTRL-M><CTRL-M> ASC(A$) AND CHR$(X)<CTRL-J>
310 REM EXAMPLE: SAVE FILE NAME
320 A$ = "FILENAME OR 12345678"
325 HOME : VTAB 13: PRINT "EXAMPLE: KEEP A$= NAME OF A FILE NAMED": PRINT : HTAB 1: PRINT "'FILENAME' THROUGH A CLEAR OR A RUN.": PRINT : HTAB 5: PRINT "(OR A NUMBER LESS THAN 0 OR >9)"
330 FOR I = 1 TO LEN(A$)
340 C$ = MID$ (A$,I,1): REM SEE PG 60 & 150, APPLESOFT MANUAL
350 POKE 2054 +I, ASC(C$)
360 NEXT I
370 VTAB 1: LIST 10
375 GOSUB 3010
380 VTAB 21: HTAB 1: CALL -958: VTAB 23: HTAB 14: FLASH : PRINT "TYPE:";: NORMAL : PRINT " RUN 400";: NORMAL
390 END
400 REM <CTRL-M><CTRL-M> READ BACK FROM MEMORY<CTRL-J>
410 VTAB 12: CALL -958: HTAB 3: PRINT "THE NAME OF THE FILE (OR NUMBER) IS:": PRINT : PRINT : PRINT
420 A$ = ""
430 FOR I = 1 TO 22: REM <CTRL-M><CTRL-M> MORE THAN LONGEST STRING<CTRL-J>
440 C = PEEK(2054 +I)
450 A$ = A$ + CHR$(C)
460 NEXT I
470 HTAB 9: PRINT "A$=";A$
480 VTAB 22: HTAB 10: FLASH : PRINT "(END OF DEMO PROGRAM)": NORMAL : FOR I = 1 TO 2000: NEXT : VTAB 22: HTAB 10: PRINT "(END OF DEMO PROGRAM)"
490 FOR I = 1 TO 1000: NEXT :G$ = "===> ANY KEY TO RETURN TO MENU......": PRINT : GOSUB 60103: GET K$: PRINT K$;: GOSUB 60110
495 RESTORE : FOR I = 1 TO 9: READ GT: READ GT$: NEXT : GOTO 2500: REM <CTRL-J><CTRL-J>
1000 REM -----------------------<CTRL-M><CTRL-M> SOFTPAL PROGRAM TEXT SCREENS<CTRL-J>
1010 TEXT : HOME : CLEAR
1020 G$ = "HERE IS A TIP ON HOW TO KEEP VARIABLES": GOSUB 60114
1030 G$ = "AND STRINGS WHEN 'CLEAR' OR 'RUN'": PRINT : GOSUB 60114
1040 G$ = "ARE USED. THIS IS VERY USEFUL IN A": PRINT : GOSUB 60114
1050 G$ = "DATA BASE PROGRAM SUCH AS 'AIM' FROM": PRINT : GOSUB 60114
1060 G$ = "NIBBLE MAGAZINE. THE ORIGINAL AIM": PRINT : GOSUB 60114
1900 FOR I = 1 TO 1000: NEXT :G$ = "===> ANY KEY TO RETURN TO MENU......": GOSUB 60103: GET K$: PRINT K$;: GOSUB 60110
1910 RESTORE : FOR I = 1 TO 9: READ GT: READ GT$: NEXT : GOTO 2500: REM <CTRL-J><CTRL-J>
2000 REM **** TITLE SCREEN ****<CTRL-J>
2010 TEXT : HOME
2020 ST$ = "AND STRINGS"
2030 VTAB 6: GOSUB 60131
2040 ST$ = "HOW TO KEEP VARIABLES"
2050 VTAB 4: GOSUB 60131
2060 FOR I = 1 TO 1000: NEXT I
2070 TEXT : HOME : GOSUB 3200: GOSUB 3100
2080 DATA 11,BY,13,JIM BURWELL,14,PO BOX 713,15,FT RUCKER ALA 36362,18,SUBROUTINES AT 60000,19,COPYRIGHT,20,NIBBLE MAGAZINE VOL 3 #4,21,(SOME SBR'S HAVE BEEN MODIFIED),23,RETURN FOR MENU....
2090 FOR I = 1 TO 8: READ GT: READ GT$: VTAB GT: HTAB 2: GOSUB 60107: NEXT
2110 VTAB 23: HTAB 28: GET Y$: IF Y$ < > CHR$(13) THEN 2110
2500 REM **** MENU ****<CTRL-J>
2510 HOME : GOSUB 3100: GOSUB 3200
2520 FOR K = 1 TO 5: READ M$(K): NEXT K
2530 DATA "TEXT SCREEN EXPLANATIONS","RUN THE DEMO PROGRAM","LIST THIS WHOLE PROGRAM","LIST DEMO PORTION ONLY","EXIT TO MENU"
2540 FOR K = 1 TO 5: VTAB (2 *K +9): HTAB 8: PRINT K;". ";M$(K): NEXT K
2550 VTAB 23: HTAB 6: INVERSE : PRINT "ENTER CHOICE (BY NUMBER): "; CHR$(91);" "; CHR$(93); CHR$(8); CHR$(8);: NORMAL : GET Y$: PRINT Y$:Y = VAL(Y$): IF Y <1 OR Y >5 THEN 2550
2560 VTAB (2 *Y +9): HTAB 8: INVERSE : PRINT Y$;". ";M$(Y): NORMAL : FOR KK = 1 TO 800: NEXT KK
2570 ON Y GOTO 1000,100,4000,4100,5000: REM <CTRL-J><CTRL-J>
3000 REM -----------------------<CTRL-M> SUBROUTINES<CTRL-J><CTRL-J>
3010 PRINT : HTAB 2: PRINT "(THE ABOVE IS AN ACTUAL LISTING": PRINT : PRINT "OF THIS PROGRAM'S LINE 10 AS CHANGED)": RETURN : REM <CTRL-J><CTRL-J>
3100 VTAB 1: HTAB 1: FOR I = 1 TO 39: PRINT "*";:X = 1: NEXT
3110 FOR I = 2 TO 23: VTAB I: HTAB 39: PRINT "*";:X = 1: NEXT
3120 VTAB 24: FOR I = 39 TO 1 STEP -1: HTAB I: PRINT "*";:X = 1: NEXT
3130 FOR I = 23 TO 2 STEP -1: VTAB I: HTAB 1: PRINT "*";:X = 1: NEXT
3140 RETURN : REM <CTRL-J><CTRL-J>
3200 VTAB 3: HTAB 10: INVERSE : PRINT "HOW TO KEEP VARIABLES": PRINT : HTAB 15: PRINT "AND STRINGS": PRINT : HTAB 10: PRINT "DURING CLEAR AND RUN": NORMAL : RETURN : REM <CTRL-J><CTRL-J>
3300 FOR I = 1 TO 1000: NEXT :G$ = "==> M=MENU.....C=CONTINUE........": GOSUB 60103:CV = PEEK(37): GET K$: PRINT K$;: IF K$ < >"M" AND K$ < >"C" THEN VTAB (CV +1): HTAB 1: CALL -868: GOTO 3300
3310 GOSUB 60110: RETURN : REM <CTRL-J><CTRL-J>
4000 REM ----------------------<CTRL-M><CTRL-M> LIST OPTIONS FROM MENU<CTRL-J><CTRL-J>
4010 TEXT : HOME : LIST
4020 GOSUB 61000
4030 FOR I = 1 TO 1000: NEXT :G$ = "===> ANY KEY TO RETURN TO MENU......": PRINT : GOSUB 60103: GET K$: PRINT K$;: GOSUB 60110
4040 RESTORE : FOR I = 1 TO 9: READ GT: READ GT$: NEXT : GOTO 2500: REM <CTRL-J><CTRL-J>
4100 TEXT : HOME : LIST -500
4110 FOR I = 1 TO 1000: NEXT :G$ = "===> ANY KEY TO RETURN TO MENU......": PRINT : GOSUB 60103: GET K$: PRINT K$;: GOSUB 60110
4120 RESTORE : FOR I = 1 TO 9: READ GT: READ GT$: NEXT : GOTO 2500
5000 REM -----------------------<CTRL-M><CTRL-M> EXIT TO PAL MENU<CTRL-J><CTRL-J>
5010 PRINT CHR$(4);"RUN MENU"
5020 REM <CTRL-M><CTRL-M>---------------------------------<CTRL-J>
59999 END
60000 REM <CTRL-M><CTRL-M>*********************************<CTRL-M> ***** GENERAL PURPOSE *****<CTRL-M><CTRL-M> SUBROUTINES FOR PROGRAMS<CTRL-M><CTRL-M> FROM NIBBLE VOL 3 #4<CTRL-M><CTRL-M>*********************************<CTRL-J><CTRL-J>
60010 REM <CTRL-M><CTRL-M>***** NIBBLE SUBROUTINES *****<CTRL-M><CTRL-M> (ONE LINE)<CTRL-M><CTRL-M>103 IS SPILL-OUT W/SOUND<CTRL-M><CTRL-M>104 IS ERASE RT-TO-LEFT W/SOUND<CTRL-M><CTRL-M>105 IS ERASE LEFT-RT W/SOUND<CTRL-M><CTRL-M>106-108 ARE STRING CENTERPRINTS<CTRL-M><CTRL-M>114-118 IS CENTER SPREAD-OUT<CTRL-M><CTRL-M>
60020 REM <CTRL-M><CTRL-M>***** NIBBLE SBR'S CONT'D *****<CTRL-M><CTRL-M>110 IS CENTER-OUT ERASE W/SOUND<CTRL-M> (FOUR-WAY)<CTRL-M><CTRL-M>120-129 IS PRINT USE FORMATTER<CTRL-M> XXXXXX.XX MAX NUMBER<CTRL-M><CTRL-M>130-140 IS FALLING LEAVES<CTRL-M><CTRL-M>*******************************<CTRL-J><CTRL-J><CTRL-J>
60103 FOR X = 1 TO LEN(G$): PRINT MID$ (G$,X,1);:XS = PEEK( -16336) + PEEK( -16336): FOR XX = 1 TO 30: NEXT : NEXT X: RETURN
60104 VTAB ( PEEK(37) +1): FOR X = LEN(G$) TO 1 STEP -1: HTAB X: CALL -868:XS = ( -16336) + PEEK( -16336): FOR XX = 1 TO 12: NEXT XX: NEXT X: POKE 37, PEEK(37) -1: RETURN
60105 VTAB ( PEEK(37) +1): FOR X = 2 TO 40: POKE 33,X: CALL -868:XS = ( -16336) + PEEK( -16336): FOR XX = 1 TO 12: NEXT XX: NEXT X: POKE 37, PEEK(37) -1: RETURN
60110 FOR X = 1 TO 12: POKE 34,(12 -X): POKE 35,(12 +X): POKE 33,(4 +3 *X): POKE 32,(24 -2 *X): HOME : FOR XX = 1 TO 3:XS = PEEK( -16336) + PEEK( -16336): NEXT XX: NEXT X: RETURN
60114 CV = PEEK(37):GS$ = "": IF LEN(G$) = 40 THEN 60117
60115 IF LEN(G$) = 39 THEN G$ = G$ +" ": GOTO 60117
60116 FOR X = 1 TO (20 - LEN(G$)/2):GS$ = GS$ +" ": NEXT X:G$ = GS$ +G$ +GS$: IF LEN(G$)/2 < > INT( LEN(G$)/2) THEN G$ = G$ +" "
60117 IF CV = 0 THEN CV = 1
60118 FOR X = 1 TO 20:GP$ = LEFT$(G$,X) + RIGHT$(G$,X): VTAB CV: HTAB 21 -X: PRINT GP$:XS = PEEK( -16336) + PEEK( -16336): NEXT X: RETURN : REM <CTRL-J><CTRL-J>
60120 REM **********************<CTRL-M><CTRL-M> ** PRINT USING SBR **<CTRL-M><CTRL-M> XXXXXX.XX MAX # ENTRY<CTRL-M><CTRL-M> OUTPUT:$ XXX,XXX.XX<CTRL-M><CTRL-M> ****************************<CTRL-J><CTRL-J>
60121 REM =>INPUT VARIABLE IS GV<CTRL-M>=>OUTPUT VARIABLE IS GV$<CTRL-M><CTRL-M>=>COLUMN WIDTH IS GW (DEFAULT 10)<CTRL-M>=># DECIMAL PLACES IS GN (DEF 2)<CTRL-M><CTRL-M>VAR USED: GN,GQ,GV,GW; GI$,GV$<CTRL-M><CTRL-M>*** MAX INPUT =>999,999.99<= ***<CTRL-J><CTRL-J>
60122 GN = GN +2 *(GN = 0):GW = GW +10 *(GW = 0): REM DEFAULTS GN TO 2, GW TO 10
60123 IF NOT GW THEN GW = 10
60124 GI$ = " " + STR$( INT(GV *10 ^GN +.5)):GQ = LEN(GI$) -( VAL(GI$) <0):GV$ = "": FOR X = 1 TO (GW -3):GV$ = GV$ +" ": NEXT
60127 IF MID$ (GV$,( LEN(GV$) -1),1) = " " THEN GV$ = " " + LEFT$(GV$,( LEN(GV$) -2)) + RIGHT$(GV$,1)
60128 GV$ = "$" +" " +GV$: RETURN
60129 REM <CTRL-M><CTRL-M>=================================<CTRL-J>
60130 REM ----------------------<CTRL-M><CTRL-M> FALLING LEAVES SUBROUTINE<CTRL-J><CTRL-J>
60131 L = PEEK(37): IF NOT QQ THEN DIM R$(40),DL(40):QQ = 1
60132 POKE 216,0: FOR X = 0 TO 39:R$(X) = " ":DL(X) = 0: NEXT X: FOR X = 1 TO LEN(ST$):R$(X) = MID$ (ST$,X,1): NEXT X: FOR X = 0 TO LEN(ST$) -1:DL(X) = INT(( RND(1) *L) -L): NEXT
60133 FOR X = 0 TO LEN(ST$):DL(X) = DL(X) +1: IF DL(X) >L THEN DL(X) = L
60134 IF DL(X) = 0 THEN DL(X) = 1
60135 IF DL(X) <1 THEN 60138
60136 HTAB (X + INT((20 - LEN(ST$)/2))): VTAB DL(X): PRINT R$(X): IF DL(X) = 1 THEN 60138